<?php
class Partner extends CActiveRecord {

    public $name;
    public $catId = 0;
    public $title;
    public $keywords;
    public $site;
    public $type = 'Простая регистрация';
    public $refLink;
    public $date;
    public $openDate;
    public $url;
    public $editorMark = 2;
    public $isClose;
    public $fieldName = 'партнерки';
    public $delegate1;
    public $delegate2;
    public $about;
    public $zeroPosition;
    
    public $relCat; //Если партнерка частично подходит и под другие категории, то она выводится в них в качестве подсказки
    public $aboutRelCat;
    public $relProfiles; //Для таких партнерок мы будем создавать несколько профилей в разных категориях 
    public $relProfilesTitle; // а это текст ссылки на эти профили
    public $invites;
    public $sort1;
    public $sort2;
    public $subCats;
    public $aboutRatingTextField;
    public $ratingTextField;
    public $stackData; // Выбор полей сорта партнерки для покатегории работает по принципу стека, подгружаются поля сорта той подкатегории что была выбрана первой, если первую убрали идет вторая и т.д. Если не выбрано подкатегории - с главной категории. 
    
    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

    public function tableName() {
        return 'partners';
    }
    
    public function pagination($limit, $offset) {
        $this->getDbCriteria()->mergeWith(array('offset' => $offset, 'limit' => $limit));
        return $this;
    }
    
    public function attributeLabels() {
        return array(
            'catId'=>'Категория',
            'zeroPosition'=>'Закрепить на 0 позиции',
            'name'=>'Название партнерки',
            'title'=>'Тег title',
            'keywords'=>'Тег keywords',
            'site'=>'Сайт партнерки',
            'type'=>'Тип',
            'refLink'=>'Реферальная ссылка',
            'openDate'=>'Дата открытия',
            'url'=>'УРЛ адрес профиля партнерки',
            'editorMark'=>'Оценка редактора',
            'isClose'=>'Закрыть партнерку',
            'fieldName'=>'Поле "Представитель"',
            'invites'=>'Инвайты',
            'delegate1'=>'1 представитель партнерки',
            'delegate2'=>'2 представитель партнерки',
            'about'=>'Описание партнерки',
        );
    }
    
    public function relations() {
        return array(
            'cat'=>array(self::BELONGS_TO, 'PartnerCat', 'catId'),
            'invite'=>array(self::HAS_MANY, 'PartnerInvite', 'partnerid'),
            'relCats'=>array(self::HAS_MANY, 'PartnerRelCat', 'partnerid'),
            'relPartners'=>array(self::HAS_MANY, 'PartnerRelProfiles', 'partnerid'),
            'raitings'=>array(self::HAS_MANY, 'PartnerRaiting', 'partnerid'),
            'score' => array(self::HAS_ONE, 'PartnersCatScore', 'partnerId'),
        );
    }
    
    public function rules() {
        return array(
            array('catId', 'numerical', 'min'=>'1', 'tooSmall'=>'Выберите категорию'),
            array('url', 'required', 'message'=>'{attribute} не может быть пустым'),
            array('url', 'unique', 'message'=>'Уже есть ПП с таким урл'),
            array('url', 'match', 'pattern'=>'/[a-zа-я]+/', 'message'=>'Введите строку в качестве урл(не цифру).'),
            array('refLink', 'url', 'message' => 'Ошибка в реферальной ссылке. Пример:http://www.yiiframework.com/', 'allowEmpty'=>true),
            array('openDate', 'match', 'pattern'=>'/^([0-2]\d|3[01])\.(0\d|1[012])\.(\d{4})$/', 'message'=>'не верный формат даты'),
            array('title, name, aboutRatingTextField, ratingTextField, url, relProfiles, aboutRelCat, sort1, sort2, keywords, site, type, editorMark, isClose, fieldName, delegate1, delegate2, invites, about, relCat, zeroPosition, relProfilesTitle, subCats, stackData', 'safe'),
        );
    }
        
    protected function afterFind() {
        if($this->openDate)
            $this->openDate = date("d.m.Y", $this->openDate);
        else $this->openDate = '';
    }

    public function afterSave() {
        Yii::app()->db->createCommand()->delete('partners_text_score', "partnerid=$this->primaryKey");
        if(!empty($this->ratingTextField)) {
            for($i=0; $i<count($this->ratingTextField); $i++) {
                if(empty($this->ratingTextField)) continue;
                Yii::app()->db->createCommand()->insert('partners_text_score', array('partnerId'=>$this->primaryKey, 'about'=>!empty($this->aboutRatingTextField[$i]) ? $this->aboutRatingTextField[$i] : '', 'title'=>$this->ratingTextField[$i]));
            }
        }
        Yii::app()->db->createCommand()->delete('partners_relprofiles', "partnerid=$this->primaryKey");
        if(!empty($this->relProfiles)) {
            for($i=0; $i<count($this->relProfiles); $i++) {
                if(empty($this->relProfiles[$i]) || empty($this->relProfilesTitle[$i])) continue;
                Yii::app()->db->createCommand()->insert('partners_relprofiles', array('partnerid'=>$this->primaryKey, 'url'=>$this->relProfiles[$i], 'title'=>$this->relProfilesTitle[$i]));
            }
        }   
        Yii::app()->db->createCommand()->delete('partners_relcat', "partnerid=$this->primaryKey");
        if(!empty($this->relCat)) {
            for ($i = 0; $i<count($this->relCat); $i++) {
                if(empty($this->aboutRelCat[$i]) || empty($this->relCat[$i])) continue;
                Yii::app()->db->createCommand()->insert('partners_relcat', array('partnerid'=>$this->primaryKey, 'relCatId'=>$this->relCat[$i], 'val'=>$this->aboutRelCat[$i]));
            }
        }
        Yii::app()->db->createCommand()->delete('partners_ratings', "partnerid=$this->primaryKey");        
        if(!empty($this->sort1)) {
            foreach ($this->sort1 as $k=>$v) {
                if(empty($v)) continue;
                $catRatingId = preg_replace("/\D/", '', $k);
                Yii::app()->db->createCommand()->insert('partners_ratings', array('partnerid'=>$this->primaryKey, 'val'=>$v, 'type'=>'1', 'catRatingId'=>$catRatingId));
            }
        }
        if(!empty($this->sort2)) {
            foreach ($this->sort2 as $k=>$v) {
                if(empty($v)) continue;
                $catRatingId = preg_replace("/\D/", '', $k);
                Yii::app()->db->createCommand()->insert('partners_ratings', array('partnerid'=>$this->primaryKey, 'val'=>$v, 'type'=>'2', 'catRatingId'=>$catRatingId));
            }
        }
        Yii::app()->db->createCommand()->delete('partners_invite', "partnerid=$this->primaryKey");
        for($i=0; $i<count($this->invites['val']); $i++) {
            $notWork = !empty($this->invites['notWork'][$i]) ? 1 : 0;
            Yii::app()->db->createCommand()->insert('partners_invite', array('partnerid'=>$this->primaryKey, 'val'=>$this->invites['val'][$i], 'notWork'=>$notWork));
        }
        $stack = explode(',', $this->stackData);
        Yii::app()->db->createCommand()->delete('partners_sub_cat_rel', "partnerId=$this->primaryKey");
        for($i=0; $i<count($this->subCats); $i++) {
            for($j=0; $j<count($stack); $j++)
                if($stack[$j] == $this->subCats[$i]) break;
            Yii::app()->db->createCommand()->insert('partners_sub_cat_rel', array('partnerId'=>$this->primaryKey, 'catId'=>$this->subCats[$i], 'stackInAdmin'=>$j));
        }
        Yii::app()->db->createCommand()->insert('mailer_auto', array('type'=>'partner', 'typeId'=>$this->primaryKey, 'date'=>time()));
    }
    
    public function beforeDelete() {
        if(!parent::beforeDelete()) return false;
        Yii::app()->db->createCommand()->delete('partners_invite', "partnerid=$this->primaryKey");
        Yii::app()->db->createCommand()->delete('partners_ratings', "partnerid=$this->primaryKey");
        Yii::app()->db->createCommand()->delete('partners_relcat', "partnerid=$this->primaryKey");
        Yii::app()->db->createCommand()->delete('partners_relprofiles', "partnerid=$this->primaryKey");
        Yii::app()->db->createCommand()->delete('reviews', "partnerid=$this->primaryKey");
        Yii::app()->db->createCommand()->delete('partners_users', 'partnerId='.$this->primaryKey);  
        Yii::app()->db->createCommand()->delete('partners_ratings', 'partnerId='.$this->primaryKey);  
        return true;
    }
    
    public function fillDelegates() {
        if($this->delegate1) {
            $item = Yii::app()->db->createCommand()->select('login')->from('users')->where("userid=$this->delegate1")->queryRow();
            $this->delegate1 = !empty($item) ? $item['login'] : '';
        } else $this->delegate1 = '';
        if($this->delegate2) {
            $item = Yii::app()->db->createCommand()->select('login')->from('users')->where("userid=$this->delegate2")->queryRow();
            $this->delegate2 = !empty($item) ? $item['login'] : '';
        } else $this->delegate2 = '';
    }
    
    public function beforeSave() {
        if(!parent::beforeSave()) return false;
        
        if(!empty($this->delegate1)) {
            $user = Yii::app()->db->createCommand()->select('userid')->from('users')->where("login=\"$this->delegate1\"")->queryRow();
            $this->delegate1 = !empty($user) ? $user['userid'] : 0;
        }
        if(!empty($this->delegate2)) {
            $user = Yii::app()->db->createCommand()->select('userid')->from('users')->where("login=\"$this->delegate2\"")->queryRow();
            $this->delegate2 = !empty($user) ? $user['userid'] : 0;
        }
        $this->date = time();
        if(!empty($this->openDate)) {
            $date = explode('.', $this->openDate);
            $this->openDate = mktime(null, null, null, $date[1], $date[0], $date[2]);
        } else $this->openDate = 0;      
        return true;
    }
}
